package com.pattern.proxy.v5;

import java.util.Random;

/**
 * 继承不好，使用聚合方式
 *
 */
public class Tank implements Movable {
    @Override
    public void move() {
        System.out.println("tank moving ");
        try {
            Thread.sleep(new Random().nextInt(10000));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new TankTimeProxy(new Tank()).move();
    }
}

/**
 * 使用一个代理类， 内部添加一个成员变量
 */
class TankTimeProxy implements Movable {

    /**
     * 被代理人
     * 问题： 这块被代理的对象还是不够灵活，只能代理Tank ---- v6
     * 被代理的对象可以是接口 --- v7
     */
    Tank tank;

    public TankTimeProxy(Tank tank) {
        this.tank = tank;
    }

    @Override
    public void move() {
        Long start = System.currentTimeMillis();
        tank.move();
        Long end = System.currentTimeMillis();
        System.out.println("运行时间： " + (end -start));
    }
}

interface Movable {
    void move();
}

